package net.valerijtimakov.homefinances.dao.storages.finances;

import java.util.Date;
import java.util.Map;
import net.valerijtimakov.homefinances.domain.finances.TransferItem;
import net.valerijtimakov.homefinances.exceptions.AppExceptionWrongState;
import net.valerijtimakov.homefinances.exceptions.AppPersProviderException;
import net.valerijtimakov.homefinances.exceptions.AppPersistentException;
import net.valerijtimakov.homefinances.exceptions.wrongarg.AppExceptionNullArgument;

public interface ITransferStorage {
	Map<Long, TransferItem> filterTransfers(long[] fromAccountsIds, long[] toAccountsIds, 
		long[] cathegoriesIds, long[] currenciesIds, Date addDateFrom, Date addDateTo, 
		float ammountFrom, float ammountTo, String namePattern) throws AppPersProviderException, AppExceptionWrongState;
	Map<Long, TransferItem> getAccountsTransfers(long ... accountsId) throws AppPersProviderException, AppExceptionWrongState;
	Map<Long, TransferItem> getTransfers(long ... id) throws AppPersProviderException, AppExceptionWrongState;
	void addTransfer(TransferItem item) throws AppExceptionNullArgument, AppExceptionWrongState, AppPersistentException;
	void removeTransfer(long id) throws AppPersProviderException, AppExceptionWrongState;
	void updateTransfer(TransferItem item) throws AppPersProviderException, AppExceptionWrongState;
}
